package com.woniuxy.user.consumer;

import com.woniuxy.redis.util.RedisKey;
import com.woniuxy.redis.util.RedisUtil;
import com.woniuxy.user.util.SendUtil;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

/**
 * 发送修改新手机号的消费者
 */
@Component
@RabbitListener(queues="update_new_phone_code_queue")//接受消息队列里的参数
public class UpdateNewPhoneCodeConsumer {
    @Resource
    private SendUtil sendUtil;
    @Resource
    private RedisUtil redisUtil;

    /**
     * 监听到参数之后 就执行发送短信方法
     * @param userPhone
     */
    @RabbitHandler
    public void sendRegisterCode(String userPhone){
        System.out.println("从消息队列中取出"+userPhone);
        //调用第三方的短信服务发送验证码
        Integer code = (int) (Math.random() * 900000) + 100000;
        String result = sendUtil.send(userPhone, code + "");
        //将验证码保存到Redis
        if (result.equals("2")) {
            //发送成功 将验证码存入redis
            redisUtil.set(RedisKey.UserUpdateNewPhoneCodeKey(userPhone), code + "", 5 * 60);
            //将这个验证码设置成一分钟过期
            redisUtil.set(RedisKey.phoneCodeOneMinuteKey(userPhone), "", 60);
            //删除错误次数的键
            redisUtil.del(RedisKey.codeErrorNumber(userPhone));
            //如果不存在发送带短信的键次数
            if (!redisUtil.hasKey(RedisKey.fiveMssageKey(userPhone))) {
                //设置一个1小时只能发5条的键
                redisUtil.set(RedisKey.fiveMssageKey(userPhone), "1", 60 * 60);
            } else {
                //如果存在发送带短信的键 加一
                redisUtil.insr(RedisKey.fiveMssageKey(userPhone));
            }
        }
    }
}
